//
// Created by DengLibin on 2018/12/11 0011.
//
/**
 * const关键字
 * C++中的const修饰的，是一个真正的常量，而不是C中变量（只读）。在const修饰的常量编译期间，就已经确定下来了。
    const和#define的区别：
		C++中的const常量类似于宏定义
		const int c = 5; ≈ #define c 5
		C++中的const常量与宏定义不同
		const常量是由编译器处理的，提供类型检查和作用域检查
		宏定义由预处理器处理，单纯的文本替换
用法：
const修饰函数参数：传递过来的参数在函数内不可以改变
const修饰成员函数： 成员函数不能修改任何的成员变量
                   const成员函数不能调用非const成员函数，因为非const成员函数可以会修改成员变量
const修饰函数返回值：
    const 修饰内置类型的返回值，修饰与不修饰返回值作用一样
    const 修饰自定义类型的作为返回值，此时返回的值不能作为左值使用，既不能被赋值，也不能被修改。
 */

#include <iostream>
using namespace std;
void test_const()
{
    int const a = 10;
    cout << &a<<endl;
   // int * p = &a; //不能赋值
}
//修饰参数
void test_const_arg(const int i)
{
    //i = 0;不能修改
}
//修饰成员函数
class ConstTeacher {
private:
    int age;
public:
    void show()const {
        //age = 23;//不能修改成员变量
    }
};
//修饰返回值
const int * get_const_i()
{
    int * i = new int (2);
    return i;
}



int main9()
{
    const int * x = get_const_i(); //必须赋值给const 类型的指针
    cout <<*x<<endl;
    delete x;
    test_const();
    return 0;
}


